Random code generators are used extensively to test operation of computing systems, integrated circuits, etc. (generally referred to as the “device under test”). Random code generators typically generate test cases including instructions (e.g., mathematical operations and read/write operations) and data patterns for exercising various components (e.g., I/O registers and memory) of the device under test to identify problems. For example, a failure which occurs frequently during execution of floating point instructions may indicate a problem with the floating point circuitry.
Test cases may be generated based on various test parameters (or “knobs”) and settings for each knob. In order to cover a large number of test parameters (or “knob space”), random code generators typically randomize the knob settings between testing. However, a pure random approach increases test time and may not focus on components which result in the most failures.
Alternatively, test results may be manually inspected and test parameters added or removed from use in future test cases to increase the likelihood that the testing continues to focus on failures in the device under test. However, manual inspection is labor intensive, increasing the time to market and cost of the final product. In addition, the manual adjustments may inadvertently focus the test cases on minor problems while downplaying or altogether ignoring potentially more significant problems with the device under test.